"""tcp 三次握手、四次挥手,数据包由操作系统发送
三次握手双发准备资源的过程
    1. Client发送一个数据给Server，比如发送1给Server 此过程为syn
    2. Server接收到数据后将Client的1再加1发给Client 此过程为ack，客户端拿着相加后的值比较是否正确
    3. Server也要给Client发一个数字
    4. Client收到后加1返给Server

    以上两次来回比较繁琐消耗时间，所以就将2、3合并，Server收到Client的数字1后加1，然后再发一个数字给Client，此时为syn、ack一起
    所以使用tcp时，客户端socket需要先调用connect连接服务查看是否连接成功


四次挥手双发释放资源的工程：
    由于Socket是全双工，可接收可发送需要单独关闭
    1. Client调用close,告诉服务器不再发送资源给Server，Server就会关闭Socket接收资源的方法
    2. Server接收到Client的关闭recv方法解堵塞，并调用服务端拿到的socket的close方法并发送数据包到Client
    3. Server调用new_client_socket的close方法会给客户端发送消息，告诉Client不会再给其发送数据，Client要关闭接收的通道
    4. Client要告诉Server收到关闭接收的数据包

三次握手的2、3可以合并为一次，四次挥手的2、3为什么不能合并？
    四次挥手中Server的new_client_socket可能延迟关闭，但是还要给Client发送不再接收数据的应答包所以不能合并

为什么一般Client先close，Server再close
    最后一次Client给Server发送关闭接收通道的数据包，如何确定Server收到？如果Server再给Client发确认包会反复循环下去，
    所以规定谁先调用close谁就会先等待一段时间(即超时时间)再释放资源，因为最后一次close消息发送给对方可能由于网络原因导致
    对方没有收到，对方处于安全考虑会再次发送一次确认数据包，如果此时我的资源释放的就会导致对方一直发送确认数据包确保我已经收到
    数据，所以保留先close方的资源一段时间为了防止网络问题带来的对方收不到确认收据包的问题，而这段时间的资源不允许重复使用，例如
    端口占用问题
"""
